package com.itheima.springbootwebtlias.controller;

import com.itheima.springbootwebtlias.pojo.Emp;
import com.itheima.springbootwebtlias.pojo.EmpQueryParam;
import com.itheima.springbootwebtlias.pojo.PageResult;
import com.itheima.springbootwebtlias.pojo.Result;
import com.itheima.springbootwebtlias.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RequestMapping("/emps")
@RestController
public class EmpController {

    @Autowired
    private EmpService empService;

    // 新增员工
    @PostMapping
    public Result save(@RequestBody Emp emp){
        log.info("请求参数emp: {}", emp);
        empService.insert(emp);
        return Result.success();
    }

    // 分页+条件 查询
    @GetMapping
    public Result page( EmpQueryParam empQueryParam) {
        //1.接收请求参数: kv格式
        //定义分页条件实体对象 + kv格式参数
        log.info("分页条件查询，请求参数：{}", empQueryParam);

        //2.调用业务层方法，查询分页数据
        PageResult pageResult = empService.page(empQueryParam);

        //3.封装响应数据
        return Result.success(pageResult);
        //code = 1，msg = success，data = pageResult

    }

    //查询全部员工
    @GetMapping("/list")
    public Result queryAll() {
        //1.接收请求参数：无
        //2.调用业务层Service功能方法，查询全部员工
        List<Emp> empList = empService.queryAllEmp();
        //3.封装响应数据
        return Result.success(empList);
    }

    //批量删除员工
    @DeleteMapping
    public Result remove(@RequestParam List<Integer> ids){
        //1.接收请求参数：k=v
        //定义变量：List<Integer>
        log.info("删除员工，接收到的参数：{}",ids);
        //2.调用业务层Service功能方法，删除员工
        empService.removeBatch(ids);
        //3.封装响应数据
        return Result.success();
        //code = 1, msg = "success", data = null
    }

    //2.4 根据ID查询,查询回显
    @GetMapping("/{id}")
    public Result queryById(@PathVariable Integer id){
        //1.接收请求参数：path @PathVariable + 变量
        log.info("根据id查询员工信息，接收到的参数：{}",id);
        //2.调用业务层Service功能方法，查询回显
        Emp emp =  empService.queryById(id);
        //3.封装响应数据,返回结果
        return Result.success(emp);
    }

    //修改员工信息+工作经历，更新
    @PutMapping
    public Result update(@RequestBody Emp emp){
        //1.接收请求参数：json
        //json接收参数：@RequestBody + 实体对象 / Map对象
        log.info("修改更新员工信息，接收到的参数：{}",emp);

        //2.调用业务层Service功能方法，修改员工信息
        empService.update(emp);
        //3.封装响应数据
        return Result.success();
    }
}
